/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Dao.ColaboradorJpaController;
import Dao.EventoJpaController;
import Dao.exceptions.NonexistentEntityException;
import Dao.exceptions.PreexistingEntityException;
import Logica.Colaborador;
import Logica.Competencia;
import Logica.Evento;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManagerFactory;

/**
 *
 * @author User
 */
public class ControladorEvento {
    
    ColaboradorJpaController daoColaborador;
    private EntityManagerFactory factory;
    private ConnectionFactory connection;
    private EventoJpaController daoEvento;
    
    public ControladorEvento(){
        connection = ConnectionFactory.getFactory();
        factory= connection.getFactoria();
        daoEvento = new EventoJpaController(factory);
        daoColaborador = new ColaboradorJpaController(factory);
        
    }
    
        //Crear daoEvento;
    public boolean crearEvento(String idEvento, String nombre, String descripcion, String logo, Date fechaInicio, Date fechaFin, String idDirector){
        Evento evento = new Evento();
        evento.setIdEvento(idEvento);
        evento.setNombre(nombre);
        evento.setDescripcion(descripcion);
        evento.setLogo(logo); //Ruta de la imagen;
        evento.setFechaInicio(fechaInicio);
        evento.setFechaFin(fechaFin);
        Colaborador cola = daoColaborador.findColaborador(idDirector);
        evento.setIdDirector(cola);
        try {
            daoEvento.create(evento);
            return true;
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        } catch (Exception ex) {
            Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
        
        
    }
    
    public boolean eliminarEvento(String idEvento){
        try {
            daoEvento.destroy(idEvento);
            return true;
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
        
    }
    
    public boolean editarEvento(String idEvento, String nombre, String descripcion,  String logo, Date fechaInicio, Date fechaFin, String idDirector){
        Evento evento=daoEvento.findEvento(idEvento);
        evento.setNombre(nombre);
        evento.setDescripcion(descripcion);
        evento.setLogo(logo); //Ruta de la imagen;
        evento.setFechaInicio(fechaInicio);
        evento.setFechaFin(fechaFin);
        Colaborador cola = daoColaborador.findColaborador(idDirector);
        evento.setIdDirector(cola);
        try {
            daoEvento.edit(evento);
            return true;
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        } catch (Exception ex) {
            Logger.getLogger(ControladorEvento.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
    
    public Evento consultar(String idEvento){
        Evento eve= daoEvento.findEvento(idEvento);
        return eve;
    }
    
    public List<Evento> listarEventos(){
        List<Evento> eventos = daoEvento.findEventoEntities();
        return eventos;
        
    }
    
    public boolean agregarColaborador(String idColaborador, String idEvento){
        boolean exito = true;
        Colaborador colaborador = this.daoColaborador.findColaborador(idColaborador);
        Evento evento = this.daoEvento.findEvento(idEvento);
        
        ArrayList<Colaborador> colaboradores = (ArrayList<Colaborador>) evento.getColaboradorCollection();
        colaboradores.add(colaborador);
        evento.setColaboradorCollection(colaboradores);
        try 
        {
            this.daoEvento.edit(evento);
        } 
        catch (NonexistentEntityException ex) 
        {
            exito=false;
        } 
        catch (Exception ex) {
            exito=false;
        }
        
        return exito; 
    }
    public boolean eliminarDirectorEvento(String idDirector, String idEvento)
    {
        boolean exito = true;
        ArrayList<Colaborador> colaboradores;
        Colaborador colaborador = this.daoColaborador.findColaborador(idDirector);
        Evento evento = this.daoEvento.findEvento(idEvento);
        
        colaboradores = (ArrayList<Colaborador>) evento.getColaboradorCollection();
        colaboradores.remove(colaborador);
        evento.setColaboradorCollection(colaboradores);
        try 
        {
            this.daoEvento.edit(evento);
        } catch (NonexistentEntityException ex) 
        {
            exito = false;
        } catch (Exception ex) {
            exito = false;
        }
        
        return exito;       
    }
    public int numEventos(){
        return daoEvento.getEventoCount();
    }
    
}
